package com.redepronik.negosys.invfac.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * The persistent class for the entrada database table.
 * 
 */
@Entity
@Table(schema = "invfac", name = "entrada")
@NamedQuery(name = "Entrada.findAll", query = "SELECT e FROM Entrada e")
public class Entrada implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(allocationSize = 1, name = "ENTRADA_ENTRADAID_GENERATOR", sequenceName = "INVFAC.ENTRADA_ENTRADAID_SEQ")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ENTRADA_ENTRADAID_GENERATOR")
	@Column(unique = true, nullable = false)
	private Integer entradaid;

	@Column(nullable = false, precision = 20, scale = 10)
	private BigDecimal cuota;

	@Temporal(TemporalType.DATE)
	@Column(nullable = false)
	private Date fechalimite;

	@Temporal(TemporalType.DATE)
	@Column(nullable = false)
	private Date fechamora;

	@Temporal(TemporalType.DATE)
	private Date fechapago;

	@Column(precision = 20, scale = 10)
	private BigDecimal mora;

	@Column(nullable = false)
	private Boolean pagado;

	@Column(nullable = false, precision = 20, scale = 10)
	private BigDecimal saldo;

	// bi-directional many-to-one association to Egreso
	@ManyToOne
	@JoinColumn(name = "egresoid", nullable = false)
	private Egreso egreso;

	// bi-directional many-to-one association to Pagoentrada
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "entrada")
	private List<Pagoentrada> pagoentradas;

	public Entrada() {
	}

	public Pagoentrada addPagoentrada(Pagoentrada pagoentrada) {
		getPagoentradas().add(pagoentrada);
		pagoentrada.setEntrada(this);

		return pagoentrada;
	}

	public BigDecimal getCuota() {
		return this.cuota;
	}

	public Egreso getEgreso() {
		return this.egreso;
	}

	public Integer getEntradaid() {
		return this.entradaid;
	}

	public Date getFechalimite() {
		return this.fechalimite;
	}

	public Date getFechamora() {
		return this.fechamora;
	}

	public Date getFechapago() {
		return this.fechapago;
	}

	public BigDecimal getMora() {
		return this.mora;
	}

	public Boolean getPagado() {
		return this.pagado;
	}

	public List<Pagoentrada> getPagoentradas() {
		return this.pagoentradas;
	}

	public BigDecimal getSaldo() {
		return this.saldo;
	}

	public Pagoentrada removePagoentrada(Pagoentrada pagoentrada) {
		getPagoentradas().remove(pagoentrada);
		pagoentrada.setEntrada(null);

		return pagoentrada;
	}

	public void setCuota(BigDecimal cuota) {
		this.cuota = cuota;
	}

	public void setEgreso(Egreso egreso) {
		this.egreso = egreso;
	}

	public void setEntradaid(Integer entradaid) {
		this.entradaid = entradaid;
	}

	public void setFechalimite(Date fechalimite) {
		this.fechalimite = fechalimite;
	}

	public void setFechamora(Date fechamora) {
		this.fechamora = fechamora;
	}

	public void setFechapago(Date fechapago) {
		this.fechapago = fechapago;
	}

	public void setMora(BigDecimal mora) {
		this.mora = mora;
	}

	public void setPagado(Boolean pagado) {
		this.pagado = pagado;
	}

	public void setPagoentradas(List<Pagoentrada> pagoentradas) {
		this.pagoentradas = pagoentradas;
	}

	public void setSaldo(BigDecimal saldo) {
		this.saldo = saldo;
	}

}